from Sommet import Sommet from Face import Face import matplotlib.pyplot as plt from mpl_toolkits.mplot3d.art3d import Poly3DCollection class Objet3D: """ Représente un objet 3D composé de sommets, de faces et d'un nom. """ def __init__(self): """ Initialise un objet 3D vide. """ self.sommets = [] self.faces = [] self.nom = "" def ajouter_sommet(self, x, y, z): """ Ajoute un sommet à l'objet 3D. """ self.sommets.append(Sommet(x, y, z)) def ajouter_face(self, liste_sommets): """ Ajoute une face à l'objet 3D. """ self.faces.append(Face(liste_sommets)) def __str__(self): """ Renvoie une représentation textuelle de l'objet 3D. """ return str({'nom': self.nom, 'sommets': len(self.sommets), 'faces': len(self.faces)}) def afficher(self): """ Affiche l'objet 3D à l'aide de matplotlib. """ fig = plt.figure() ax = fig.add_subplot(111, projection='3d') f = [] for face in self.faces: print(face.sommets) x = [(self.sommets[s-1].x, self.sommets[s-1].y, self.sommets[s-1].z) for s in face.sommets] f.append(x) mesh = Poly3DCollection(f, alpha=0.4, edgecolor='black') ax.add_collection3d(mesh) plt.show() ############################################################################# # Méthode à modifier de la question 5 # ############################################################################# def transformer(self, rapport): """ Applique une transformation d'échelle à l'objet 3D en modifiant directement ses sommets. """ nouvel_objet = Objet3D() nouvel_objet.nom = self.nom for sommet in self.sommets: nouvel_objet.ajouter_sommet(sommet.x * rapport, sommet.y * rapport, sommet.z * rapport) for face in self.faces: nouvel_objet.ajouter_face(face.sommets[:]) return nouvel_objet ############################################################################# # Écrire le code de la méthode trouver_sommets_adjacents de la question 2 # ############################################################################# def trouver_sommets_adjacents(self): for i in range(len(self.sommets)): for j in range(i + 1, len(self.sommets)): if self.sommets[i].est_adjacent(self.sommets[j]): return (self.sommets[i], self.sommets[j]) return None ############################################################################# # Programme pour tester votre méthode de la question 2 # ############################################################################# objet = Objet3D() objet.ajouter_sommet(0, 0, 0) # s1 objet.ajouter_sommet(1, 0, 0) # s2 objet.ajouter_sommet(0, 1, 0) # s3 objet.ajouter_sommet(0, 0, 1) # s4 print(objet.trouver_sommets_adjacents())